1610B - Kalindrome Array - CodeForces Solution


greedy two pointers *1100

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
bool plaindrome(vector<int>&v,int n){
int a = n/2;
for(int i =0;i<a;i++){
  if(v[i]!=v[n-i-1])
  return false;
} 
return true;
}





int main(){
    int t;
    cin>>t;
    while(t--){
      int n;
      cin>>n;
      vector<int>v;
      for(int i =0;i<n;i++){
        int x;
        cin>>x;
        v.push_back(x);
      }
      if(n==2){
        cout<<"YES"<<endl;
        continue;
      }
   unordered_map<int,int>mp;
   for(int i =0;i<n;i++){
    mp[v[i]]++;
   }

    vector<int>a,b,c,d;
       if(v[0]!=v[n-1]){
        if((mp[v[0]]==1)&&(mp[v[n-1]]==1)){
          cout<<"NO"<<endl;
          continue;
        }
        if((mp[v[0]]>1) || (mp[v[n-1]]>1)){
          for(int i =0;i<n;i++){
            if(v[i]!=v[0]){
              a.push_back(v[i]);
            }
            if(v[i]!=v[n-1]){
              b.push_back(v[i]);
            }
          } 
          if(plaindrome(a,a.size())||plaindrome(b,b.size())) cout<<"YES"<<endl;
          else cout<<"NO"<<endl;
          continue;
        }




       }  

       else { 
        int flag =0;
        int p =0,q=0;
        int i =0 , j = n-1;
        while(i<j){
          if(v[i]==v[j]){
            i++;
            j--;
          } 
          else{
             p= v[i];
             q = v[j]; 
             flag = 1;
             break;
          }


        } 
        if(flag==0){
          cout<<"YES"<<endl;
          continue;
        }

         for(int i =0;i<n;i++){
          if(v[i]!=p){
            c.push_back(v[i]);

          }
          if(v[i]!=q) d.push_back(v[i]);

         } 
         if(plaindrome(c,c.size())||plaindrome(d,d.size())) cout<<"YES"<<endl;
          else cout<<"NO"<<endl;
          continue;


       }
       





    }

}


Comments

Submit
0 Comments
More Questions

155A - I_love_username
49A - Sleuth
1541A - Pretty Permutations
1632C - Strange Test
673A - Bear and Game
276A - Lunch Rush
1205A - Almost Equal
1020B - Badge
1353A - Most Unstable Array
770A - New Password
1646B - Quality vs Quantity
80A - Panoramix's Prediction
1354B - Ternary String
122B - Lucky Substring
266B - Queue at the School
1490A - Dense Array
1650B - DIV + MOD
1549B - Gregor and the Pawn Game
553A - Kyoya and Colored Balls
1364A - XXXXX
1499B - Binary Removals
1569C - Jury Meeting
108A - Palindromic Times
46A - Ball Game
114A - Cifera
776A - A Serial Killer
25B - Phone numbers
1633C - Kill the Monster
1611A - Make Even
1030B - Vasya and Cornfield